package logica;


import logica.coleccionables.*;
import logica.obstaculos.*;
import logica.pisos.*;
import logica.premios.*;

import grafica.*;
import grafica.coleccionables.*;
import grafica.obstaculos.*;
import grafica.pisos.*;
import grafica.premios.*;
import grafica.robots.*;

/**
 * Clase que inicializa todas las entidades del juego.
 * @author Amorosi, Javier (94528)
 * @author Antiman, Nehuen (102440)
 */
public class IniciarNivel {
	
	String inicial; 
	
	/**
	 * Constructor de IniciarNivel.
	 */
	public IniciarNivel(){
		
	}
	
	/**
	 * Dado los pámetro que se detallan inicializa todas las entidades del juego. 
	 * @param s String que representa el mapa del juego.
	 * @param n Nivel del juego dondes se ubican todos los elementos.
	 * @param g Gráfica del juego, maneja su interfaz gráfica.
	 * @param tipoRobot entero que indica que tipo de robot se eligío. 
	 * Tipos de Robot:
	 * 0 robot civil.
	 * 1 robot militar.
	 */
	public void iniciar(String s,Nivel n, ControlGraficos g, int tipoRobot){
		inicial=new String(s); 
		////Fila f columna del nivel."Coordenadas en el gráfico"
		int c=0;
		int f=0;

		//Robot se agrega al final, a inicializar en en switch.
		int robotF=0;
		int robotC=0;
		char ch;
		int i=0;
		while (i<inicial.length() && f<n.getFilas()){
			ch=inicial.charAt(i);
			while(i<inicial.length() && ch!='\n' && c<n.getColumnas()){
				while (i<inicial.length() && ch!=';'){
					switch (ch){
					//Celda Vacia
						case 'V':{
						
						}break;
					//Piso.
						case 'R':{//arena.
							g.add(new ArenaEntity(g,"datos/default/PisoArena.png",f,c));
							n.setPiso(new Arena(f, c), f, c);
						}break;
						case 'A':{//asfalto.
							g.add(new AsfaltoEntity(g,"datos/default/PisoAsfalto.png", f,c));							
							n.setPiso(new Asfalto(f, c), f, c);
						}break;
						case 'G':{//agua.
							g.add(new AguaEntity(g,"datos/default/PisoAgua.jpg", f,c));							
							n.setPiso(new Agua(f, c), f, c);
						}break;
						case 'F':{//fuego.
							g.add(new FuegoEntity(g,"datos/default/PisoFuego.jpg", f,c));							
							n.setPiso(new Fuego(f, c), f, c);
						}break;
					//Premio
						case 'C':{//combustible.
							g.add(new PremioCombustibleEntity(g,"datos/default/PremioCombustible.png", f,c));
							n.getPiso(f, c).colocarPremio(new PremioCombustible());
						}break;
						case 'B':{//balas.
							g.add(new PremioBalasEntity(g,"datos/default/PremioBalas.png", f,c));
							n.getPiso(f, c).colocarPremio(new PremioBalas());
						}break;
						case 'P':{//puntos.
							g.add(new PremioPuntosEntity(g,"datos/default/PremioPuntos.png", f,c));
							n.getPiso(f, c).colocarPremio(new PremioPuntos());
						}break;
					//Coleccionable
						case 'O':{//cono.
							g.add(new ConoEntity(g,"datos/default/ColCono.png", f,c));
							n.getPiso(f, c).colocarColeccionable(new Cono());
						}break;
						case 'Z':{//baliza.
							g.add(new BalizaEntity(g,"datos/default/ColBaliza.png", f,c));
							n.getPiso(f, c).colocarColeccionable(new Baliza());
						}break;
					//Obstaculo
						case 'E':{//pared.
							Pared pared=new Pared();
							n.getPiso(f, c).colocarObstaculo(pared);
							g.add(new ParedEntity(g,"datos/default/ObsPared.png", f,c, pared.getResistencia()));							
						}break;
						case 'L':{//planta.
							Planta planta=new Planta();
							n.getPiso(f, c).colocarObstaculo(planta);
							g.add(new PlantaEntity(g,"datos/default/ObsPlanta.png", f,c, planta.getResistencia()));
							
						}break;
						case 'J':{//caja.
							Caja caja=new Caja();
							n.getPiso(f, c).colocarObstaculo(caja);
							g.add(new CajaEntity(g,"datos/default/ObsCaja.png", f,c, caja.getResistencia()));							
						}break;
						case 'T':{//concreto.
							g.add(new ConcretoEntity(g,"datos/default/ObsConcreto.png", f,c));
							n.getPiso(f, c).colocarObstaculo(new Concreto());
						}break;
					//Posicion inicial f final.
						case '@':{//inicial.
							g.add(new PisoInicialEntity(g,"datos/default/pisoInicial.png", f,c));
							robotC=c;
							robotF=f;
							n.setPisoInicial(n.getPiso(f, c));
							//System.out.println(f+ " inicial "+c);
						}break;
						case '#':{//final.
							g.add(new PisoFinalEntity(g,"datos/default/pisoFinal.png", f,c));
							n.setPisoFinal(n.getPiso(f, c));
						}break;
					}
					i++;
					if (i<inicial.length())
						ch=inicial.charAt(i);
				}
				c ++; 
				i++;
				if (i<inicial.length())
					ch=inicial.charAt(i);
			}
			c=0;
			f++;
			i++;
		}
		RobotEntity r;
		if (tipoRobot==1)
			r=new RobotMilitarEntity(g,"datos/default/RobotMilitar.png",robotF,robotC);
		else
			r=new RobotCivilEntity(g,"datos/default/RobotCivil.png",robotF,robotC);
		g.setRobotG(r);
	}
	
}
